In many computer implementations, it is desirable to be able to transfer messages of arbitrary size between one or more machines in a computing environment. Conventional approaches to the problem typically employ networking hardware and a layered networking protocol, which disassembles the message into fragments of a size that the lower layers of the networking protocol and the networking hardware can transfer. Accordingly, the conventional approaches must disassemble messages into fragments at the sending machine, transport the message fragments over the network, and then reassemble the message fragments at the receiving machine.
Conventional approaches typically involve the use of a fixed size buffer to transfer information from the sending machine to the receiving machine. The size of the buffer limits the size of the message that can be transferred at any one time. Using an arbitrarily large buffer wastes space when a message of smaller size is sent. In many approaches, larger messages must be broken down into small size pieces by a protocol stack, for example. In other approaches, if the character of the message traffic is well known, the size of the buffer can be allocated accordingly to take advantage of this knowledge.
However, none of these approaches enables transfer of arbitrary sized messages without incurring the overhead of network protocol fragmentation.